
        <html>
			<head>
			     <title>攻击JavaWeb应用[1]-JavaEE 基础 - iswin</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/163">http://drops.wooyun.org/tips/163</a></h1>
				
      <p>
        <h3>0x00 JavaEE 基础</h3>

<hr />

<p>JSP: 全名为java server page，其根本是一个简化的<a href="http://baike.baidu.com/view/25169.htm">Servlet</a>。</p>

<p>Servlet：Servlet是一种服务器端的Java应用程序，可以生成动态的Web页面。</p>

<p>JavaEE: JavaEE是J2EE新的名称。改名目的是让大家清楚J2EE只是Java企业应用。</p>

<p>什么叫Jsp什么叫Java我真的非常让大家搞清楚！拜托别一上来就来一句：“前几天我搞了一个jsp的服务器，可难吭了。”。</p>

<p>请大家分清楚什么是jsp什么是JavaEE! <!--more--> Java平台结构图：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121402758922.jpg" alt="20130703172818_61466.jpg" /></p>

<p>可以看到Java平台非常的庞大，而开发者的分化为：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121402773595.jpg" alt="20130703172846_40325.jpg" /></p>

<p>列举这两个图的原因就是让你知道你看到的JSP不过是冰山一角，Jsp技术不过是Java初级开发人员必备的技术而已。</p>

<p>我今天要讲的就是Java树的最下面的两层了，也是初级工程师需要掌握的东西。</p>

<p>Web请求与相应简要的流程：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121402818882.gif" alt="20130703173033_49603.gif" /></p>

<p>这是一个典型的就是客户端发送一个HTTP请求到服务器端，服务器端接收到请求并处理、响应的一个过程。</p>

<p>如果请求的是JSP，tomcat会把我们的JSP编译成Servlet也就是一个普通的Java类。</p>

<p>其实JSP是Servlet的一种特殊形式，每个JSP页面就是一个Servlet实例。Servlet又是一个普通的Java类它编译后就是一个普通的class文件。</p>

<p>这是一个普通的jsp脚本页面，因为我只用JSP来作为展示层仅仅做了简单的后端数据的页面展示：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121402828073.png" alt="20130703175439_28704.png" /></p>

<p>上图可以非常清晰的看到通常的Jsp在项目中的地位并不如我们大多数人所想的那么重要，甚至是可有可无！因为我们完全可以用其他的东西来代替JSP作为前端展示层。 我们来看一下这个页面编译成class后是什么样子：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121402947381.png" alt="20130703175626_72063.png" /></p>

<p>你会发现你根本就看不懂这个class文件，因为这是字节码文件我们根本就没法看。通过我们的TOMCAT编译后他编程了一个Java类文件保存在Tomcat的work目录下。</p>

<p>文件目录：<code>C:\apache-tomcat-7.0.34\work\Catalina\localhost\你的项目名\org\apache\jsp</code></p>

<p><img src="http://static.wooyun.org/20131001/2013100121403013200.png" alt="20130703175736_31874.png" /></p>

<p>我们只要打开index_jsp.java或者用jd-gui（Java反编译工具）打开就行了：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403030848.png" alt="20130703175806_35537.png" /></p>

<p>有人说这是Servlet吗？当然了。</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403179251.png" alt="20130703175859_89447.png" /></p>

<p>继承HttpJspBase类，该类其实是个HttpServlet的子类(jasper是tomcat的jsp engine)。</p>

<p>Jsp有着比Servlet更加优越的展现，很多初学PHP的人恐怕很难把视图和逻辑分开吧。比如之前在写PHPSQL注入测试的DEMO：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403186966.png" alt="20130703175946_12770.png" /> </p>

<p>这代码看起来似乎没有什么大的问题，也能正确的跑起来啊会有什么问题呢？原因很简单这属于典型的展现和业务逻辑没有分开！这和写得烂的Servlet差不多！</p>

<p>说了这么多，很多人会觉得Servlet很抽象。我们还是连创建一个Servlet吧：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403285842.png" alt="20130703180119_18901.png" /></p>

<p>创建成功后会自动的往web.xml里面写入：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403392073.png" alt="20130703180159_14918.png" /></p>

<p>其实就是一个映射的URL和一个处理映射的类的路径。而我们自动生成的Java类精简后大致是这个样子：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403367772.png" alt="20130703180237_62390.png" /></p>

<p>请求响应输出内容：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403413323.png" alt="20130703180312_90096.png" /></p>

<p>熟悉PHP的大神们这里就不做解释了哦。了解了Jsp、Servlet我们再来非常简单的看一下JavaWeb应用是怎样跑起来的。</p>

<p>加载web.xml的配置然后从配置里面获取各种信息为WEB应用启动准备。</p>

<h4>科普：<code>C:\apache-tomcat-7.0.34\webapps</code>下默认是部署的Web项目。webapps 下的文件夹就是你的项目名了，而项目下的WebRoot一般就是网站的根目录了，WebRoot下的文件夹WEB-INF默认是不让Web访问的，一般存在配置泄漏多半是nginx配置没有过滤掉这个目录。</h4>

<p><img src="http://static.wooyun.org/20131001/2013100121403430491.png" alt="20130703180428_53304.png" /></p>

<p><img src="http://static.wooyun.org/20131001/2013100121403524776.png" alt="20130703180442_56745.png" /></p>

<p>快速定位数据库连接信息：</p>

<p>大家可能都非常关心数据库连接一般都配置在什么地方呢？</p>

<p>答案普遍是：<code>C:\apache-tomcat-7.0.34\webapps\wordpress\WEB-INF</code>下的<code>***.xml</code></p>

<p>大多数的Spring框架都是配置在applicationContext里面的：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403512335.png" alt="20130703180636_91481.png" /></p>

<p>如果用到Hibernate框架那么：<code>WebRoot\WEB-INF\classes\hibernate.cfg.xml</code></p>

<p><img src="http://static.wooyun.org/20131001/2013100121403678320.png" alt="20130703180710_10465.png" /></p>

<p>还有一种变态的配置方式就是直接卸载源代码里面:</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403775740.png" alt="20130703180735_97556.png" /></p>

<p>Tomcat的数据源（其他的服务器大同小异）：</p>

<p>目录：<code>C:\apache-tomcat-7.0.34\conf\context.xml、server.xml</code></p>

<p><img src="http://static.wooyun.org/20131001/2013100121403760162.png" alt="20130703180923_33143.png" /></p>

<p><img src="http://static.wooyun.org/20131001/2013100121403888007.png" alt="20130703180936_47449.png" /></p>

<p>Resin数据源：</p>

<p>路径：<code>D:\installDev\resin-pro-4.0.28conf\resin.conf(resin 3.x是resin.xml)</code></p>

<p>其他的配置方式诸如读取如JEECMS读取的就是<strong>.properties</strong>配置文件，这种方式非常的常见：</p>

<p><img src="http://static.wooyun.org/20131001/2013100121403985065.png" alt="20130703181109_16068.png" /></p>

<h3>0x01 Tomcat 基础</h3>

<hr />

<p><img src="http://static.wooyun.org/20131001/2013100121403959009.png" alt="enter image description here" /></p>

<p>没错,这就是 TOM 猫。楼主跟这只猫打交道已经有好几年了,在 Java 应用当中 TOMCAT 运用的非常的广泛。</p>

<p>TOM 猫是一个 Web 应用服务器,也是 Servlet 容器。</p>

<p>Apache+Tomcat 做负载均衡:</p>

<p><img src="http://static.wooyun.org/20131001/2013100121404042561.jpeg" alt="enter image description here" /></p>

<h4>Tomcat快速定位到网站目录：</h4>

<p>如何快速的找到tomcat的安装路径:</p>

<pre><code>1、不管是谁都应该明白的是不管apache还是tomcat安装的路径都是随意的，所以找不到路径也是非常正常的。
2、在你的/etc/httpd/conf/httpd.conf里面会有一个LoadModule jk_module配置用于集成tomcat然后找到JkWorkersFile也就是tomcat的配置，找到.properties的路径。httpd里面也有可能会配置路径如果没有找到那就去apache2\conf\extra\httpd-vhosts看下有没有配置域名绑定。  
3、在第二步的时候找到了properties配置文件并读取，找到workers.tomcat_home也就是tomcat的配置路径了。  
4、得到tomcat的路径你还没有成功，域名的具体配置是在conf下的server.xml。  
5、读取server.xml不出意外你就可以找到网站的目录了。  
6、如果第五步没有找到那么去webapps目录下ROOT瞧瞧默认不配置的话网站是部署在ROOT下的。  
7、这一点是附加的科普知识爱听则听：数据库如果启用的tomcat有可能会采用tomcat的数据源配置未见为conf下的context.xml、server.xml。如果网站有域名绑定那么你可以试下ping域名然后带上端口访问。有可能会出现tomcat的登录界面。tomcat默认是没有配置用户登录的，所以当tomcat-users.xml下没有相关的用户配置就别在这里浪费时间了。  
8、如果配置未找到那么到网站目录下的WEB-INF目录和其下的classes目录下找下对应的properties、xml（一般都是properties）。  
9、如果你够蛋疼可以读取WEB.XML下的classess内的源码。  
10、祝你好运。
</code></pre>

<h4>apache快速定位到网站目录：</h4>

<p>普通的域名绑定：</p>

<p>直接添加到<code>confhttpd.conf、confextrahttpd-vhosts.conf</code></p>

<h4>Resin快速定位到网站目录:</h4>

<p>在resin的conf下的resin.conf(resin3.x)和resin.xml(resin4.x)</p>

<p>Resin apache 负载均衡配置(从我以前的文章中节选的)</p>

<p>APACHE RESIN 做负载均衡,Resin 用来做 JAVAWEB 的支持,APACHE 用于处理静态</p>

<p>和 PHP 请求,RESIN 的速度飞快,RESIN 和 apache 的配合应该是非常完美的吧。</p>

<p>域名解析:</p>

<p>apache 的 httpd.conf:</p>

<p><img src="http://static.wooyun.org/20131001/2013100121404099546.jpeg" alt="enter image description here" /></p>

<p>需要修改:Include conf/extra/httpd-vhosts.conf(一定要把前面的#除掉,否则配置不起作用)</p>

<p>普通的域名绑定:</p>

<p>直接添加到 httpd.conf</p>

<pre><code>&lt;VirtualHost *:80&gt;
    ServerAdmin <a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="4726232a2e2907252d243e30692429">[email&#160;protected]</a><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script>
    DocumentRoot E:/XXXX/XXX
    ServerName beijingcanyinwang.com
    ErrorLog E:/XXXX/XXX/bssn-error_log
    CustomLog E:/XXXX/XXX/bssn_log common 
&lt;/VirtualHost&gt;
</code></pre>

<p>二级域名绑定,需要修改:</p>

<pre><code>E:\install\apache2\conf\extra\httpd-vhosts.conf
</code></pre>

<p>如:</p>

<pre><code>&lt;VirtualHost *:80&gt;
    DocumentRoot E:/XXXXXXX/XXX
    ServerName bbs.beijingcanyinwang.com 
    DirectoryIndex index.html index.php index.htm
&lt;/VirtualHost&gt;
</code></pre>

<p><img src="http://static.wooyun.org/20131001/2013100121404093109.png" alt="enter image description here" /></p>

<p>Resin 的</p>

<p><img src="http://static.wooyun.org/20131001/2013100121404141531.jpeg" alt="enter image description here" /></p>

<p>请求处理:</p>

<pre><code>&lt;LocationMatch (.*?).jsp&gt;
SetHandler caucho-request 
&lt;/LocationMatch&gt;
&lt;LocationMatch (.*?).action&gt; 
SetHandler caucho-request 
&lt;/LocationMatch&gt;
&lt;LocationMatch union-resin-stat-davic&gt; 
SetHandler caucho-request 
&lt;/LocationMatch&gt;
&lt;LocationMatch stat&gt; 
SetHandler caucho-request 
&lt;/LocationMatch&gt; 
&lt;LocationMatch load&gt;
SetHandler caucho-request 
&lt;/LocationMatch&gt; 
&lt;LocationMatch vote&gt; 
SetHandler caucho-request 
&lt;/LocationMatch&gt;
</code></pre>

<p>APACHE 添加对 Resin 的支持:</p>

<p><img src="http://static.wooyun.org/20131001/2013100121404242521.png" alt="enter image description here" /></p>

<pre><code>LoadModule caucho_module "E:/install/resin-pro-3.1.12/win32/apache-2.2/mod_caucho. dll"
</code></pre>

<p>然后在末尾加上:</p>

<pre><code>&lt;IfModule mod_caucho.c&gt; 
ResinConfigServer localhost 6800 
CauchoStatus yes
&lt;/IfModule&gt;
</code></pre>

<p>只有就能让 apache 找到 resin 了。</p>

<p>PHP 支持问题:</p>

<p>resin 默认是支持 PHP 的测试 4.0.29 的时候就算你把 PHP 解析的 servlet 配置删了一样解析 PHP,无奈换成了 resin 3.1 在注释掉 PHP 的 servlet 配置就无压力了。</p>

<p><img src="http://static.wooyun.org/20131001/2013100121404227439.jpeg" alt="enter image description here" /></p>

<p>整合成功后:</p>

<p><img src="http://static.wooyun.org/20131001/2013100121404327997.png" alt="enter image description here" /></p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          